using System.Web.Routing;


namespace Wayloop.Web.Mvc.Routing
{
    public interface IRoutableArea : IFluentInterface
    {
        /// <summary>
        /// Adds a route for the specified URL.
        /// </summary>
        /// <param name="url">The URL.</param>
        void AddRoute(string url);


        /// <summary>
        /// Adds a route for the specified URL with the specified default URL parameter values.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        void AddRoute(string url, object defaults);


        /// <summary>
        /// Adds a route for the specified URL with the specified default URL parameter values.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        void AddRoute(string url, RouteValueDictionary defaults);


        /// <summary>
        /// Adds a route for the specified URL with the specified default URL parameter values and constraints.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        /// <param name="constraints">The URL parameter value constraints.</param>
        void AddRoute(string url, object defaults, object constraints);


        /// <summary>
        /// Adds a route for the specified URL with the specified default URL parameter values and constraints.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        /// <param name="constraints">The URL parameter value constraints.</param>
        void AddRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints);


        /// <summary>
        /// Adds a named route for the specified URL.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="url">The URL.</param>
        void AddRoute(string name, string url);


        /// <summary>
        /// Adds a named route for the specified URL with the specified default URL parameter values.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        void AddRoute(string name, string url, object defaults);


        /// <summary>
        /// Adds a named route for the specified URL with the specified default URL parameter values.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        void AddRoute(string name, string url, RouteValueDictionary defaults);


        /// <summary>
        /// Adds a route for the specified URL with the specified default URL parameter values and constraints.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        /// <param name="constraints">The URL parameter value constraints.</param>
        void AddRoute(string name, string url, object defaults, object constraints);


        /// <summary>
        /// Adds a route for the specified URL with the specified default URL parameter values and constraints.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="url">The URL.</param>
        /// <param name="defaults">The default URL parameter values.</param>
        /// <param name="constraints">The URL parameter value constraints.</param>
        void AddRoute(string name, string url, RouteValueDictionary defaults, RouteValueDictionary constraints);
    }
}